Linie ⊂ Bézier ⊂ B-Spline ⊂ NURBS
Jede analytische Kurve ist ein NURBS-Spezialfall → einheitlicher Standard (CATIA, SolidWorks, NX, OCCT).
geomType |
Bedeutung |
|---|---|
LINE, CIRCLE, ELLIPSE |
analytisch, exakt gespeichert |
BSPLINE |
Freiformkurve (B-Spline / NURBS – dieselbe Klasse) |
Beim STEP-Import erscheinen Freiformkurven als BSPLINE, teils sogar ursprüngliche Kreise – je nach exportierendem System.
Aus Theorie A: fragt nach den Ableitungen nach , nur nach der Geometrie. Beim Aneinanderstoßen von Kurven und Flächen zählen im CAD vor allem:
| Klasse | stimmt überein | sichtbar |
|---|---|---|
| Position | Knick erlaubt | |
| Tangentenrichtung | glatt fürs Auge | |
| Krümmung | reflexionsglatt |
Rechts der Krümmungskamm: Striche senkrecht zur Kurve, ihre Länge ist proportional zur Krümmung.
ist nicht überall nötig. Hier schon:
| Anwendung | warum |
|---|---|
| Optik / Design | Lichtreflexion folgt der Krümmung – ein Sprung ist sichtbar |
| Fertigung | Fräserbahn = Versatz der Fläche – Krümmungssprung → Maßfehler |
| Aerodynamik | Grenzschicht reagiert auf Krümmungsänderung |
| Kontakt / Implantate | Spannungsspitze genau am Krümmungssprung |
Faustregel: für boolesche Kanten, für Karosserie und Strömung.
Eine Fläche hat zwei Parameter:
Alles von den Kurven gilt eine Dimension höher weiter. Die analytische Familie (Ebene, Zylinder, Kegel, Kugel, Torus) reicht für Standardkörper – der Rest wird BSPLINE.
Hält man oder fest, entsteht eine Kurve auf der Fläche (rechts). Die Normale ist (normiert) – genau das, was normalAt() berechnet.
ruled vs. glattDas Eingangsprofil bestimmt die Ausgabefläche. Loft hat zusätzlich eine Stetigkeits-Entscheidung:
from cadquery import func as cf
secs = [cf.wire(cf.circle(10)),
cf.wire(cf.circle(16)).moved(z=25),
cf.wire(cf.circle(10)).moved(z=50)]
cf.loft(secs, ruled=True) # ['CONE', 'CONE'] – Knick in der Mitte
cf.loft(secs, ruled=False) # ['BSPLINE'] – eine glatte Fläche
ruled=True: gerade Verbindung, (Bézier-Analogon). Default glatt: eine B-Spline-Fläche über alle Schnitte.
fillet ist ein Flächenerzeugerbox = cf.box(50, 30, 20)
box_f = cf.fillet(box, box.edges(), 3.0)
print(sorted(set(f.geomType() for f in box_f.Faces())))
# ['CYLINDER', 'PLANE', 'SPHERE']
Das ist dieselbe Verrundung wie seit Einheit 1 – jetzt sehen Sie, welche Flächen sie erzeugt.
An box_f stößt eine ebene Seitenfläche an die Zylinderfläche der Verrundung ( mm).
Welche Stetigkeit hat dieser Übergang?
A) B) C)
Der Reiter Zebra im Viewer spiegelt parallele Lichtstreifen auf der Oberfläche – wie die Leuchtröhren im Karosseriebau. An jedem Übergang zeigt der Streifenverlauf die Stetigkeit:
| Klasse | Streifen am Übergang |
|---|---|
| reißen ab, versetzt | |
| laufen durch, mit Knick | |
| laufen glatt durch |
Prüfen Sie Ihre Antwort: Zeigen Sie box_f, cf.loft(secs, ruled=True) und cf.loft(secs) im Viewer und öffnen Sie den Reiter Zebra. Welche Stetigkeit hat jeder Übergang?
Der Kanal verjüngt sich zum Auslass (gleichmäßige Flussverteilung). Bauen Sie den Auslass als zweiten Querschnitt:
.moved(z=40)) – so verbindet Einheit 6 beide per LoftPrüfen: Fläche nahe mm²; BoundingBox().zmin ≈ 40
geomType() Ihrer Splines – und eines Kreises (cf.circle). Was fällt auf?curvatureAt(t) an 100 Stellen entlang Ihres Einlass-Profils ab. Wo ist die Krümmung am größten, und wie groß ist dort der Krümmungsradius?Hinweise: for i in range(100): mit t = i / 100, max(...), .positionAt(t)
Verschieben Sie Punkte Ihres Einlass-Profils, bis der kleinste Krümmungsradius mindestens 3 mm beträgt – bei unveränderter Breite und Höhe.
cf.loft) – und ruled=True vs. False vergleichenw05/ (beide Profile) committet und gepusht